/**
 * jsonp 请求封装
 * 用于百度搜索智能提示
 * @param options
 * url： jsonp请求url地址
 * callback： 请求cb名字
 * time： 超市时间
 * success： 成功回调参数为response
 */
export function $jsonp(options = {}) {
  if (!options.url || !options.callback) {
    throw  new Error('参数有误')
  }
  // 创建 script 标签并加入到页面中
  var callbackName = ('jsonp_' + Math.random()).replace('.', '')
  var oHead = document.getElementsByTagName('head')[0]
  options.data[options.callback] = callbackName
  const params = formatParams(options.data)
  const oS = document.createElement('script')
  oHead.appendChild(oS)

  // 创建jsonp回调函数
  window[callbackName] = function(json) {
    oHead.removeChild(oS);
    clearTimeout(oS.timer);
    window[callbackName] = null;
    options.success && options.success(json);
  }

  // 发送请求
  oS.src = options.url + '?' + params;

  //超时处理
  if (options.time) {
    oS.timer = setTimeout(() => {
      window[callbackName] = null;
      oHead.removeChild(oS);
      options.fail && options.fail({ message: "超时" });
    }, options.time);
  }

  function formatParams(data) {
    let arr = []
    for(var name in data) {
      arr.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name]))
    }
    return arr.join('&')
  }

  // options.type = (options.type || 'GET').toUpperCase()
  // options.dataType = options.dataType || 'json'
  // params = formatParams(options.data)
  //
  // let xhr
  // if (window.XMLHttpRequest) {
  //   xhr = new XMLHttpRequest()
  // }
  //
  // if (options.type === 'GET') {
  //   xhr.open('GET', options.url + '?' + params, true)
  //   xhr.send(null)
  // } else if (options.type === 'POST') {
  //   xhr.open('POST', options.url, true)
  //   xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
  //   xhr.send(params)
  // }
  //
  // xhr.onreadystatechange = () => {
  //   if (xhr.readyState === 4) {
  //     const status = xhr.status
  //     if (status >= 200 && status < 300) {
  //       option.success && options.success(xhr.responseText, xhr.responseXML)
  //     } else {
  //       options.error && options.error(status)
  //     }
  //   }
  // }
}

/**
 * 节流函数
 * @param func
 * @param wait
 * @returns {function(...[*]=)}
 */
export function throttle(func, wait = 300) {
  let timeout;
  return function() {
    let context = this;
    let args = arguments;
    if (!timeout) {
      timeout = setTimeout(() => {
        timeout = null;
        func.apply(context, args)
      }, wait)
    }
  }
}
